Hvad er den hurtigste metode til at konvertere en java.nio.ByteBuffer a til en (nyoprettet) CharBuffer b eller char [] b. Ved at gøre dette er det vigtigt, at a [i] == b [i]. Dette betyder, at ikke en [i] og en [i + 1] sammen udgør en værdi b [j], hvad getChar (i) ville gøre, men værdierne skal "spredes". byte a [] = {1,2,3, 125,126,127, -128, -127, -126} // hver en byte (som er underskrevet) char b [] = {1,2,3, 125,126,127, 128, 129, 130} // hver en char (som ikke er underskrevet) Bemærk, at byte: -128 har de samme (nederste 8) bits som char: 128. Derfor antager jeg, at den "bedste" fortolkning ville være, som jeg bemærkede det ovenfor, fordi bitene er de samme. Derefter har jeg også brug for omvendt oversættelse: Den mest effektive måde at få en char [] eller java.nio.CharBuffer tilbage til en java.nio.ByteBuffer.
2021-01-06 08:18:03
Så hvad du ønsker er at konvertere ved hjælp af kodningen ISO-8859-1. Jeg hævder ikke noget om effektivitet, men i det mindste er det ganske kort at skrive: CharBuffer-resultat = Charset.forName ("ISO-8859-1"). Afkode (byteBuffer); Den anden retning ville være: ByteBuffer-resultat = Charset.forName ("ISO-8859-1"). Kode (charBuffer); Mål dette mod andre løsninger. (For at være retfærdig bør Charset.forName-delen ikke medtages, og den skal også kun udføres en gang, ikke for hver buffer igen.) Fra Java 7 er der også StandardCharsets-klassen med forinstanserede Charset-forekomster, så du kan bruge CharBuffer-resultat = StandardCharsets.ISO_8859_1.decode (byteBuffer); og ByteBuffer-resultat = StandardCharsets.ISO_8859_1.encode (charBuffer); i stedet. (Disse linjer gør det samme som dem før, bare opslag er lettere, og der er ingen risiko for at indtaste navnene forkert og ikke nødvendigt at fange de umulige undtagelser.) | Jeg er enig med @ Ishtar, foreslår at undgå at konvertere til en ny struktur overhovedet og kun konvertere efter behov. Men hvis du har en bunke ByteBuffer, kan du gøre. ByteBuffer bb = ... byte [] array = bb.array (); char [] chars = ny char [bb.resterende ()]; for (int i = 0; i